﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

using BancoSim.Utils.Clases;
using BancoSim.Ventanas_Modales;
using System.Collections.ObjectModel;

namespace BancoSim
{
    /// <summary>
    /// Lógica de interacción para ucLista.xaml
    /// </summary>
    public partial class ucLista : UserControl
    {
        #region Atributos y propiedades
        GestorProcesos OrdenadorProcesos;           //Ordena los procesos
        ObservableCollection<Proceso> listaProc;    //Lista de procesos
        string nomGrupo;                            //Nombre del grupo de servicio

        public string NomGrupo
        {
            get { return nomGrupo; }
            set { nomGrupo = value;}
        }

        public ObservableCollection<Proceso> ListaProc
        {
            get { return listaProc; }
            set { listaProc = value; }
        }
        #endregion

        #region Constructores
        public ucLista()
        {
            InitializeComponent();
            dgListaProcesos.DataContext = new Proceso();
            listaProc = new ObservableCollection<Proceso>();
            OrdenadorProcesos = new GestorProcesos();
        }
        public ucLista(string pNombre,Brush pColor)
        {
            InitializeComponent();
            dgListaProcesos.DataContext = new Proceso();
            listaProc = new ObservableCollection<Proceso>();
            OrdenadorProcesos = new GestorProcesos();

            nomGrupo = pNombre;
            Color = pColor;
            this.lbNombre.Content = nomGrupo;
        }
        #endregion

        #region Propiedades de dependencia
        public static DependencyProperty ColorFondo =
            DependencyProperty.Register("Color", typeof(Brush), typeof(ucLista), new FrameworkPropertyMetadata(new PropertyChangedCallback(ColorAct)));
        /// <summary>
        /// Cambia el color de fondo.
        /// </summary>
        public Brush Color
        {
            get { return (Brush)GetValue(ColorFondo); }
            set { SetValue(ColorFondo, value); }
        }

        private static void ColorAct(DependencyObject dpo, DependencyPropertyChangedEventArgs e)
        {
            ucLista control = (ucLista)dpo;
            control.gdAgregar.Background = e.NewValue as Brush;
        }
        #endregion

        #region Metodos
        /// <summary>
        /// Retorna el grid de la lista de espera.
        /// </summary>
        /// <returns></returns>
        public DataGrid GetGrid()
        {
            return this.dgListaProcesos;
        }

        private void btnAgregar_Click(object sender, RoutedEventArgs e)
        {
            cwAgregarProceso agregarProceso = new cwAgregarProceso(this.nomGrupo);
            agregarProceso.ShowDialog();                                             //LLama a la ventana para agregar un proceso.

            if (agregarProceso.DialogResult == true)          //Si fue guardado
            {
                Proceso p = agregarProceso.ProcRegistrado();  //Se copia el proceso 

                listaProc.Add(p);                             // y se agrega a la lista de procesos.

                OrdenadorProcesos.OrdenarProceso(listaProc);  // Se reordena la lista.
                dgListaProcesos.ItemsSource = listaProc;      // y finalmente semuestra.
            }
        }
        #endregion
    }
}
